 /**
   * 2.调用小程序内部api 获取用户的收货地址 wx.chooseAddress
   * 
   * 3.获取 用户 对小程序 所授予 获取收货地址 权限 状态 scope
   *   1.假设用户点击获取收货地址的提示框确认 authSetting Scope.address
   *      scope 值 true 直接调用 获取收货地址
   *   2.假设用户没用调用过收货地址api
   *      scope 值1就是undefined 也是直接调用 获取收货地址
   *   3.假设用户 点击获取收货地址的提示框取消
   *      scope 值false
   *     1.诱导用户自己打开 授予设置页面 wx.openSetting当用户重新给与 获取地址权限的时候
   *     2.获取收货地址
   */
// 引入获取地址的api
import {getSetting,chooseAddress,openSetting,showModal,showToast} from "../../utils/asyncWx.js"
import regeneratorRuntime from '../../lib/runtime/runtime';
  
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    pitch:false,
    totalPrice:0,
    totalNum:0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  // 显示触发的事件
  onShow(){
    // 获取缓存中的收货地址信息
    const address = wx.getStorageSync("address");
    // 获取缓存中的购物车数据
    const cart = wx.getStorageSync("cart")||[];
     
    this.setData({address})
    this.getjisuan(cart)
    // 计算全选
    // every 数组方法 会遍历 会接收一个回调函数 那么每一个回调函数都会返回true 那么 evert方法的返回值为true
    // 只要 有一个回调函数返回了false 那么就不再循环执行 ，直接返回false
    // const pitch =cart.length?cart.every(v=>v.chek):false;
    // 优化代码
    //  let pitch =true
    // 计算总价格和总数量
    // 总价给
    // let totalPrice = 0;
    // 总数量
    // let totalNum = 0;
    // cart.forEach(v=>{
    //   if(v.chek){
    //     totalPrice+=v.num*v.goods_price
    //     totalNum+=v.num
    //   }else{
    //     pitch=false
    //   }
    // })
    // 判断数组是否为空
    // pitch = cart.length!=0?pitch:false
    //给data赋值
    // this.setData({
    //   address,
    //   cart,
    //   pitch,
    //   totalPrice,
    //   totalNum
    // })
  },
  // 没有进行封装的获取权限状态
  // handdizhi(){
    // 没有进行封装的获取权限状态
      // 1.获取 权限状态
      // wx.getSetting({
      //   success:(result)=>{
      //     //2.获取权限状态 主要发现一些属性属性名很怪异的时候，都要使用【】形式来获取属性值
      //     const scopeAddress = result.authSetting["scope.address"];
      //     if(scopeAddress===true||scopeAddress===undefined){
      //       wx.chooseAddress({
      //         success: (result1)=>{
      //           console.log(result1)
      //         },
             
      //       });
      //     }else{
      //       //3.用户以前拒接过授予权限，先诱导用户打开授权页面
      //       wx.openSetting({
      //         success: (result2)=>{
      //           // 4.可以调用，收货地址了
      //           wx.chooseAddress({
      //             success:(result3)=>{
      //               console.log(result3)
      //             }
      //           })
      //         },
             
      //       });
      //     }
      //   }
      // })
  // },
  // 封装之后
  //点击获取收货地址
async  handdizhi(){
  
   try {
       //  封装获取权限状态方法
   const res1 =await getSetting();
   //1.获取权限状态 主要发现一些属性属性名很怪异的时候，都要使用【】形式来获取属性值
   const scopeAddress = res1.authSetting["scope.address"];
  //2.判断 权限状态
   if(scopeAddress===false){
     //3.先诱导用户打开授权页面
     await openSetting();
   }
   let address = await chooseAddress();
   address.all = address.provinceName+address.cityName+address.countyName+address.detailInfo
   
  //  console.log(res2)
  // 保存到缓存中
  wx.setStorageSync("address",address);
   } catch (error) {
     console.log(error)
   }
  },
  // 复选框点击事件
  handChang(e){
  //  1.获取被修改的商品的id
  let goods_id=e.currentTarget.dataset.id;
  // 2.获取购物车数组
  let cart =this.data.cart;
    // console.log(goods_id)
    // 3.找到被修改的商品对象
    let index = cart.findIndex(v=>v.goods_id===goods_id)
     // 4.选中状态取反
    cart[index].chek=!cart[index].chek
    // 5.6把购物车数据重新设置回data中和缓存中
    this.getjisuan(cart)
  },
  getjisuan(cart){
    
    // 优化代码
    let pitch =true
    // 计算总价格和总数量
    // 总价给
    let totalPrice = 0;
    // 总数量
    let totalNum = 0;
    cart.forEach(v=>{
      if(v.chek){
        totalPrice+=v.num*v.goods_price
        totalNum+=v.num
      }else{
        pitch=false
      }
    })
    // 判断数组是否为空
    pitch = cart.length!=0?pitch:false
    this.setData({
      cart,totalNum,totalPrice,pitch
    });

    wx.setStorageSync("cart",cart);
  },
  // 全选按钮
  handAllchek(){
//  获取data中的数据
let {cart,pitch} = this.data
// 修改值
pitch = !pitch;
// 3.循环cart改版商品的选中状态
cart.forEach(v=>v.chek=pitch);
// 把修改的值填充回data或者缓存中
this.getjisuan(cart);
  },
  // 点击加减按钮
 async handAdd(e){
    // 获取自定义属性的值
    const {id,open}=e.currentTarget.dataset;
    // 2.获取购物车的数组
    let {cart} = this.data
    // 找到对应商品的索引
    const index = cart.findIndex(v=>v.goods_id===id)
    // 4.进行修改数量
    if(cart[index].num===1&&open===-1){
      // wx.showModal({
      //   title: '提示',
      //   content: '确认删除这个商品吗？',
      //   success :(res)=> {
      //     if (res.confirm) {
      //       console.log('用户点击确定')
      //       cart.splice(index,1)
      //       this.getjisuan(cart)
      //     } else if (res.cancel) {
      //       console.log('用户点击取消')
      //     }
      //   }
      // })
      //
  
      // 封装方法
      const res = await showModal({content:"确认要删除吗"})
      if (res.confirm) {
        console.log('用户点击确定')
        cart.splice(index,1)
        this.getjisuan(cart)
      } 
    }else{
      cart[index].num+=open
      // 重新添加到data中
      this.getjisuan(cart)
    }
   

  },
 async handPay(){
    const {address,totalNum}=this.data
    // 判断是否有收获地址
    if(!address.userName){
    await showToast({title:"请添加用户收获地址"})
      return;
    }
    if(totalNum===0){
      await showToast({title:"请添加商品"})
      return;
    }
    wx.navigateTo({
      url: '/pages/pay/index',
     
    });
  }
})